/*
*Copyright 2021-2023 NERCIS
*
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*Unless required by applicable law or agreed to in writing, software
*distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*See the License for the specific language governing permissions and
*limitations under the License.
*/

package cn.ac.nercis.pes.common.utils;

import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.KeyUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
import lombok.SneakyThrows;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.RandomStringUtils;

import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;

/**
 * 密码工具类
 * @author zpy
 * @version 1.0.0
 */
public class PasswordUtils {
    private static final Integer MIN_GENERATE_PWD_LENGTH = 15;
    private static final Integer MAX_GENERATE_PWD_LENGTH = 30;

    public static String encryption(String content){
        return DigestUtils.md5Hex(content);
    }

    @SneakyThrows
    public static String rsaEncrypt(String content,String publicKey){
        var key = KeyUtil.generatePublicKey(AsymmetricAlgorithm.RSA.getValue(), SecureUtil.decode(publicKey));
        Cipher cipher =Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE,key);
        byte[] encryptData= cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
        return Base64.encode(encryptData);
    }

    public static String generatePassword(){
        return RandomStringUtils.randomAlphanumeric(MIN_GENERATE_PWD_LENGTH,MAX_GENERATE_PWD_LENGTH);
    }

    public static String generatePassword(int pwdLength){
        return RandomStringUtils.randomAlphanumeric(pwdLength,pwdLength);
    }
}